#pragma once

#include <stdio.h>
#include <stdlib.h>

typedef int BOOL;
#define TRUE 1
#define FALSE 0

#define OVERFLOW -2
#define INFEASIBLE -1
#define ERROE 0

#define ElemType int

//对一个结构体进行类型定义，从不同的角度观察，有不同的含义
//比如这个，可以作为节点，也可以作为链表头节点（即链表）
typedef struct Node {
    ElemType data;
    struct Node* next;
} Node, *LinkList;

void TestLinkList();

void showElem(ElemType);

void ClearList(LinkList);

BOOL IsEmpty(LinkList);

int GetLength(LinkList);

void GetElem(LinkList, int, ElemType*);

void InsertElem(LinkList, int, ElemType);

void AppendElem(LinkList, ElemType);

void DeleteElem(LinkList, int);

void TraveseList(LinkList, void (*)(ElemType));

// ClearList()只是清空链表的所有元素，并没有释放表头占用的内存空间
void DisposeList(LinkList);
